parser grammar Anasin;

options {
language = Java;
  tokenVocab = Analex;
}
 
@header {
package PL.prac3;
}

 @rulecatch {catch (RecognitionException e) {
  throw e;}
  }
  
entrada_fichero : con_fichero EOF; 
con_fichero: (asignacion_numero|asignacion_booleano|asignacion_directorio|asignacion_mensaje|asignacion_variable|condicion)*;
asignacion_numero: IDENT OPERADOR NUMERO SEPARADOR ;
asignacion_booleano: IDENT OPERADOR BOOLEANO SEPARADOR;
asignacion_directorio: IDENT OPERADOR DIRECTORIO SEPARADOR;
asignacion_mensaje: IDENT OPERADOR CADENA SEPARADOR;
asignacion_variable: SET_VAR OPERADOR (NUMERO|BOOLEANO|DIRECTORIO|CADENA) SEPARADOR;
comprobacion: (IDENT | VARIABLE | ((IDENT | VARIABLE) OPERADOR OPERADOR (NUMERO|BOOLEANO|DIRECTORIO|CADENA)));
condicion: OPCION OP_PARENTESIS comprobacion CL_PARENTESIS OP_LLAVE con_fichero CL_LLAVE; 
buclefor: SETFOR OP_PARENTESIS (IDENT| VARIABLE) CL_PARENTESIS OP_LLAVE con_fichero CL_LLAVE;
buclewhile: SETWHILE OP_PARENTESIS comprobacion CL_PARENTESIS OP_LLAVE con_fichero CL_LLAVE;

entrada_sin: (sin_fichero EOF | DOLAR);
sin_fichero: (asignacion_numero2|asignacion_booleano2|asignacion_directorio2|asignacion_mensaje2|asignacion_variable2|condicion2)*;
asignacion_numero2: IDENT OPERADOR NUMERO ;
asignacion_booleano2: IDENT OPERADOR BOOLEANO;
asignacion_directorio2: IDENT OPERADOR DIRECTORIO;
asignacion_mensaje2: IDENT OPERADOR CADENA;
asignacion_variable2: SET_VAR OPERADOR (NUMERO|BOOLEANO|DIRECTORIO|CADENA);
condicion2: OPCION OP_PARENTESIS comprobacion CL_PARENTESIS OP_LLAVE sin_fichero CL_LLAVE; 